# -*- coding:utf-8 -*-
from legendaryPowerClientScript.util.pluginManager import PluginManager
from legendaryPowerClientScript.util.scheduler import Scheduler
def getPluginManager():
    # type: () -> PluginManager
    """
    插件管理类，请在插件的__init__中调用 apiUtil.getPluginManager().registerPlugin(self) 将插件注册
    Returns：
        - mgr (PluginManager)：插件管理类
    """
    return PluginManager()


def formatTimeLeft(seconds, short=True):
    # type: (int, bool) -> str
    """
    格式化时间
    若传入seconds=3680：
    若short=True：则只返回最大的时间单位，即“1小时”
    否则，返回详细时间，即“1小时1分钟20秒”

    参数：
        - seconds (int)：剩余秒数
        - short (bool)：是否不显示尾数，默认为True。

    返回：
        - s (str)：格式化后的剩余时间字符串
    """
    return ""


def GetScheduler():
    # type: () -> Scheduler
    """
    获取计时器，可用于定时执行任务

    Returns:
        Scheduler: 计时器实例。
    """
    pass

def formatNumber(num):
    # type: (int/str) -> None
    """
    格式化数值显示，添加“亿”或“万”单位

    参数：
        - num (int/str)：待格式化的数值

    返回：
        - str：格式化后的数值字符串
    """
    pass

def sendChatMessage(message):
    # type: (str) -> None
    """
    在聊天栏显示一行信息

    参数：
        - message (str)：信息内容
    """
    pass

def sendMessage(message):
    # type: (str) -> None
    """
    在屏幕中上位置显示一行信息
    参数：
        - message (str)：信息内容
    """
    pass

def calcTimeLeft(seconds, steps=1):
    # type: (int, int) -> str
    """
    将秒数转换为 X天X小时X分的形式
    参数：
        seconds (int)：剩余秒数
        steps (int)：要显示几个单位
    返回:
        str: 显示时间
    """
    return ""


def convertEncode(value):
    # type: (list or dict or str) -> object
    """
    给指定的玩家发送邮件
    Args:
        value (list or dict or str): 将该对象中的UTF-8编码或unicode转码为可读取的格式。mysql中存储的都是unicode哦
    Returns:
        value (object)：转码后的value
    """
    pass

def shakeCamera(strength, decreaseSpeed):
    # type: (float, float) -> None
    """
    屏幕抖动
    Args:
        strength (float): 抖动幅度
        decreaseSpeed (float): 抖动幅度衰减速度
    """
    pass

def DoEntityExist(entityId):
    # type: (str) -> None
    """
    判断本地是否有该实体的数据
    Args:
        entityId (str): 实体ID
    """
    pass

def stripColor(s):
    """
    移除字符串中的所有颜色代码
    Args:
        text (str): 任意字符串
    Returns:
        text (str): 移除颜色代码后的字符串
    """
    pass

def playSound(sound, loc=None, volume=1.0, pitch=1.0, repeat=False):
    # type: (str, str or tuple or None, float, float, bool) -> None
    """
    播放声音
    Args:
        sound (str): 声音ID，即sound_definition.json中定义的声音ID
        loc (str or tuple or None): 播放声音的位置，可传入实体ID，坐标tuple，或None（即本地玩家）
        volume (float): 声音大小
        pitch (float): 声音声调
        repeat (bool): 声音结束后是否重新播放，只支持播放于本地玩家
    """
    pass

def getStrWidth(s):
    """
    获取字符串在屏幕上显示的长度，注意因为是自己写的计算，会有一些偏差
    Args:
        text (str): 任意字符串
    Returns:
        length (int): 屏幕显示的长度
    """
    pass

def OpenGui(gui):
    # type: (UIBase) -> None
    """
    显示一个UI界面，会关闭掉当前正在看的
    Args:
        gui (UIBase): 界面
    """
    pass

def gauseTo(radius, ticks):
    # type: (float, float) -> None
    """
    打开屏幕模糊
    Args:
        radius (float): 模糊程度
        ticks (float): 在多少时间内渐变过去
    """
    pass

def SetMouseEnabled(enabled):
    # type: (bool) -> None
    """
    唤出鼠标，慎用，很多问题。仅支持PC端
    Args:
        enabled (bool): 是否显示鼠标
    """
    pass

def lookAt(pos, rotateFirstPerson=False, speed=270, switchToFirstPerson=False, time=None, forceLock=False):
    # type: (str or Vector or tuple, bool, float, bool, float, bool) -> None
    """
    令本地玩家看向某一坐标
    Args:
        pos (str or Vector or tuple): 看向的实体或坐标
        rotateFirstPerson (bool): 若在第一人称状态下，是否也要强制看过去，默认False
        speed (float): 转向速度
        switchToFirstPerson (bool): 若不在第一人称下 ，是否变成第一人称（完成后会切换回去）。默认False
        time (float): 锁定视角时间，期间玩家无法转动视角。默认None
        forceLock (bool): 是否要在time秒内锁定视角，默认False
    """
    pass

def rotateLocalPlayer(yaw, pitch, rotateFirstPerson=True):
    # type: (float, float) -> None
    """
    将本地玩家旋转到指定的yaw,pitch
    Args:
        yaw (float): 横向角度。当前角度在.loc中有显示
        pitch (float): 纵向角度。当前角度在.loc中有显示
        rotateFirstPerson （bool）： 若玩家在第一人称，是否也要转动，默认True
    """
    pass

def CloseGui(gui, close=True, delay=0):
    # type: (UIBase, bool, int) -> None
    """
    关闭指定的UI界面。一般都用于关闭当前打开的界面
    Args:
        gui (UIBase): 要关闭的界面。可用 apiUtil.CloseGui(apiUtil.displayingGui) 关闭当前显示的界面
        close (bool): 是否真的要关闭界面。填False时，只会执行关闭的逻辑，而不会真的关闭界面。默认True
        delay (int): 关闭的延迟，单位游戏刻，一秒=20刻
    """
    pass

def formatVanillaDesc(item):
    # type: (itemDict) -> list[str]
    """
    生成该物品的原版描述。若物品不是原版物品，或已有自定义描述，则返回其自定义描述
    若传入的不是物品，则返回空列表
    Args:
        item (itemDict): 物品字典
    Returns:
        desc (list[str]): 描述
    """
    return ""


